כל צומת x מקיים שהמפתח שלו קטן או שווה למפתח ההורה שלו.
ייצוג במערך:
עץ בעל n צמתים מאוחסן במערך A רמה אחר רמה, משמאל לימין.
כאשר A.size שומר את מספר האיברים החוקיים בערימה, בעוד ש-A.length הוא הגודל הפיזי המקסימלי של המערך.
ניווט במערך:
ההורה של תא i ממוקם באינדקס , הילד השמאלי ב-2i+1 והילד הימני ב-2i+2.
פעולות על ערימה:
פעולת MaxHeapify:
פונקציה המקבלת אינדקס i, ומניחה שתתי-העצים של הילדים של הצומת באינדקס כבר מקיימים את תכונת הערימה.
הפונקציה בודקת מי הגדול מבין הצומת ושני ילדיו. אם הצומת קטן מאחד מילדיו, היא מחליפה אותו עם הילד בעל המפתח המקסימלי, וקוראת לעצמה ברקורסיה על האינדקס של הילד שהוחלף.
זמן ריצה:
תלוי בגובה העץ (או תת-העץ), ולכן הסיבוכיות היא או .
פעולת BuildMaxHeap:
בונה ערימת מקסימום ממערך לא ממוין.
הפונקציה רצה בלולאה מאינדקס ההורה של האיבר האחרון ויורדת עד לאינדקס 0. על כל צומת כזה היא מפעילה את maxHeapify.
זמן ריצה:
חסם נאיבי ייתן אך ניתוח הדוק מראה שיש לכל היותר צמתים בגובה h.
סכום זמני הריצה הוא , שלפי נוסחת סכום סדרה מתכנס לחסם קבוע של 2. מכאן שזמן הריצה לבניית ערימה הוא .
שאר הפעולות (מימוש תור העדיפויות):
פעולת Maximum: מחזירה את A בזמן .
פעולת ExtractMax:
לוקחת את המקסימום ב-A, מחליפה אותו עם האיבר האחרון במערך, מקטינה את A.size ב-1, ומפעילה MaxHeapify על השורש.
זמן ריצה .
פעולת IncreaseKey:
מעדכנת את הערך לאינדקס i.
לאחר מכן, מבעבעת את האיבר כלפי מעלה בלולאה - כל עוד ערכו גדול מהערך של ההורה שלו, מתבצעת החלפה.
זמן ריצה .
פעולת Insert:
מוסיפה איבר חדש לסוף המערך עם מפתח התחלתי של מינוס אינסוף, ומגדילה את A.size.
לאחר מכן קוראת ל-IncreaseKey כדי לעדכן אותו לערך האמיתי ולבעבע אותו למקום הנכון.
זמן ריצה .
מיון ערימה (Heapsort):
שלבי האלגוריתם:
קורא ל- BuildMaxHeap כדי להפוך את המערך לערימה.
לאחר מכן, רץ בלולאה n−1 פעמים: בכל איטרציה שולף את האיבר המקסימלי באמצעות ExtractMax ומציב אותו בסוף המערך המצטמצם.